home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NeXTSTEP 3.1 (Developer) [x86]
/
NeXT Step 3.1 Intel dev.cdr.dmg
/
NextDeveloper
/
Examples
/
IndexingKit
/
Ledger
/
JFTableViewLoader.m
< prev
next >
Wrap
Text File
|
1993-01-25
|
4KB
|
177 lines
#import "JFTableViewLoader.h"
#import "JFTableVectorConfiguration.h"
/*
* JFTableViewLoader, NeXT Systems Engineering
* Written by Joe Freeman
*
* A list of these configuration objects is fed to a JFTableViewLoader
* to tell it what ivars and titles map into a DBTableView
*/
@implementation JFTableViewLoader
/* static char VERSION[] = " @(#) Version: 2, Project: TableViewLoader, Written By: Joe Freeman, 1992"; */
- (const char *)getInspectorClassName
{
return "JFDBTVLoaderInspector";
}
- setTableView:anObject;
{
tableView = anObject;
[tableView setDataSource:self];
return self;
}
- setDataList:anObject
{
dataList = anObject;
[tableView reloadData:self];
return self;
}
/* this doesn't do what we want in the inspector in IB
* because it relies on the tableView nstance var being set up
* in ib, the connections in build mode, are fake. So,
* we have to have this method happen in awake
*/
- setConfigurationList:cList
{
int i;
int tCount;
id <DBTableVectors > aVector;
[[tableView window] disableFlushWindow]; /* DBTV ignores autodisplay */
configList = cList;
/* configure the columns */
/* first figure out how many columns there are, and how many we need */
tCount = [tableView columnCount];
for (i = [configList count]; i < tCount; i++)
[tableView removeColumnAt:[configList count]];
/* then make the numbers match and load up the titles and identifiers */
for (i = 0; i < [configList count]; i++) {
if (i < tCount) {
aVector = [tableView columnAt:i];
[aVector setIdentifier:(id)i];
[aVector setTitle:[[configList objectAt:i] title]];
} else {
[tableView addColumn:(id)i
withTitle:[[configList objectAt:i] title]];
}
}
[[tableView window] reenableFlushWindow];
[[tableView window] flushWindowIfNeeded];
return self;
}
- setDataList:anObject andConfigurationList:cList
{
[self setConfigurationList:cList];
/* now load em up */
[self setDataList:anObject];
return self;
}
/*======================================================================
* Inspector support
*======================================================================*/
- (DBTableView *) tableView
{
return tableView;
}
- (List *) dataList
{
if (dataList)
return dataList;
else
return[[List alloc] init];
}
- (List *) configList
{
if (configList)
return configList;
else
return[[List alloc] init];
}
/*======================================================================
* Archiving
*======================================================================*/
- awakeFromNib
{
[self setConfigurationList:configList];
return self;
}
- read:(NXTypedStream *) typedStream
{
[super read:typedStream];
dataList = NXReadObject(typedStream);
configList = NXReadObject(typedStream);
tableView = NXReadObject(typedStream);
return self;
}
- write:(NXTypedStream *) typedStream
{
[super write:typedStream];
NXWriteObjectReference(typedStream, dataList);
NXWriteObject(typedStream, configList);
NXWriteObjectReference(typedStream, tableView);
return self;
}
/*======================================================================
* DBTableView data source (psuedo-delegate) methods
*======================================================================*/
- (unsigned int)rowCount
{
return[dataList count];
}
/* DBTV sends this message when it needs to know what to display */
- getValueFor:identifier at:(unsigned int)aPosition into:aValue
{
/*
* note that when loaded, we set the identifiers to be the locations of the
* configuration objects in the configuration list
*/
if (configList)
[[configList objectAt:(int)identifier]
getValueFromObject:[dataList objectAt:aPosition]
into:aValue];
else
[aValue setStringValue:""];
return nil;
}
/* DBTV sends this message when data in a cell has changed */
- setValueFor:identifier at:(unsigned int)aPosition from:aValue
{
[[configList objectAt:(int)identifier]
setValueForObject:[dataList objectAt:aPosition]
from:aValue];
return nil;
}
@end